home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / glibc-1.09 / glibc-1 / glibc-1.09.1 / malloc / mem-limits.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-01  |  3.9 KB  |  185 lines

  1. /* Includes for memory limit warnings.
  2.    Copyright (C) 1990, 1993, 1994 Free Software Foundation, Inc.
  3.  
  4.  
  5. This file is part of the GNU C Library.  Its master source is NOT part of
  6. the C library, however.  The master source lives in /gd/gnu/lib.
  7.  
  8. The GNU C Library is free software; you can redistribute it and/or
  9. modify it under the terms of the GNU Library General Public License as
  10. published by the Free Software Foundation; either version 2 of the
  11. License, or (at your option) any later version.
  12.  
  13. The GNU C Library is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16. Library General Public License for more details.
  17.  
  18. You should have received a copy of the GNU Library General Public
  19. License along with the GNU C Library; see the file COPYING.LIB.  If
  20. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  21. Cambridge, MA 02139, USA.  */
  22.  
  23. #ifdef MSDOS
  24. #include <dpmi.h>
  25. #endif
  26.  
  27. /* Some systems need this before <sys/resource.h>.  */
  28. #include <sys/types.h>
  29.  
  30. #ifdef _LIBC
  31.  
  32. #include <sys/resource.h>
  33. #define BSD4_2            /* Tell code below to use getrlimit.  */
  34.  
  35. #else
  36.  
  37. #if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha))
  38. #include <sys/time.h>
  39. #include <sys/resource.h>
  40. #endif
  41.  
  42. #ifdef __bsdi__
  43. #define BSD4_2
  44. #endif
  45.  
  46. #ifndef BSD4_2
  47. #ifndef USG
  48. #ifndef MSDOS
  49. #ifndef WINDOWSNT
  50. #include <sys/vlimit.h>
  51. #endif /* not WINDOWSNT */
  52. #endif /* not MSDOS */
  53. #endif /* not USG */
  54. #else /* if BSD4_2 */
  55. #include <sys/time.h>
  56. #include <sys/resource.h>
  57. #endif /* BSD4_2 */
  58.  
  59. #endif /* _LIBC */
  60.  
  61. #ifdef emacs
  62. /* The important properties of this type are that 1) it's a pointer, and
  63.    2) arithmetic on it should work as if the size of the object pointed
  64.    to has a size of 1.  */
  65. #ifdef __STDC__
  66. typedef void *POINTER;
  67. #else
  68. typedef char *POINTER;
  69. #endif
  70.  
  71. typedef unsigned long SIZE;
  72.  
  73. #ifdef NULL
  74. #undef NULL
  75. #endif
  76. #define NULL ((POINTER) 0)
  77.  
  78. extern POINTER start_of_data ();
  79. #ifdef DATA_SEG_BITS
  80. #define EXCEEDS_LISP_PTR(ptr) \
  81.   (((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
  82. #else
  83. #define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS)
  84. #endif
  85.  
  86. #ifdef BSD
  87. #ifndef DATA_SEG_BITS
  88. extern char etext;
  89. #define start_of_data() &etext
  90. #endif
  91. #endif
  92.  
  93. #else  /* Not emacs */ 
  94. extern char etext;
  95. #define start_of_data() &etext
  96. #endif /* Not emacs */
  97.  
  98.   
  99.  
  100. /* start of data space; can be changed by calling malloc_init */
  101. static POINTER data_space_start;
  102.  
  103. /* Number of bytes of writable memory we can expect to be able to get */
  104. static unsigned int lim_data;
  105.  
  106. #ifdef NO_LIM_DATA
  107. static void
  108. get_lim_data ()
  109. {
  110.   lim_data = -1;
  111. }
  112. #else /* not NO_LIM_DATA */
  113.  
  114. #ifdef USG
  115.  
  116. static void
  117. get_lim_data ()
  118. {
  119.   extern long ulimit ();
  120.  
  121.   lim_data = -1;
  122.  
  123.   /* Use the ulimit call, if we seem to have it.  */
  124. #if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX)
  125.   lim_data = ulimit (3, 0);
  126. #endif
  127.  
  128.   /* If that didn't work, just use the macro's value.  */
  129. #ifdef ULIMIT_BREAK_VALUE
  130.   if (lim_data == -1)
  131.     lim_data = ULIMIT_BREAK_VALUE;
  132. #endif
  133.  
  134.   lim_data -= (long) data_space_start;
  135. }
  136.  
  137. #else /* not USG */
  138. #ifdef WINDOWSNT
  139.  
  140. static void
  141. get_lim_data ()
  142. {
  143.   extern unsigned long data_region_size;
  144.   lim_data = data_region_size;
  145. }
  146.  
  147. #else
  148. #if !defined (BSD4_2) && !defined (__osf__)
  149.  
  150. #ifdef MSDOS
  151. void
  152. get_lim_data ()
  153. {
  154.   _go32_dpmi_meminfo info;
  155.  
  156.   _go32_dpmi_get_free_memory_information (&info);
  157.   lim_data = info.available_memory;
  158. }
  159. #else /* not MSDOS */
  160. static void
  161. get_lim_data ()
  162. {
  163.   lim_data = vlimit (LIM_DATA, -1);
  164. }
  165. #endif /* not MSDOS */
  166.  
  167. #else /* BSD4_2 */
  168.  
  169. static void
  170. get_lim_data ()
  171. {
  172.   struct rlimit XXrlimit;
  173.  
  174.   getrlimit (RLIMIT_DATA, &XXrlimit);
  175. #ifdef RLIM_INFINITY
  176.   lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
  177. #else
  178.   lim_data = XXrlimit.rlim_cur;    /* soft limit */
  179. #endif
  180. }
  181. #endif /* BSD4_2 */
  182. #endif /* not WINDOWSNT */
  183. #endif /* not USG */
  184. #endif /* not NO_LIM_DATA */
  185.